/////////////////////////////////////////////////////////////////////////////
//                                                                         //
// <socketclient_utils.h> - socket client module.                          //
//                                                                         //
// Version :        0.0.1                                                  //
// Language :       C                                                      //
// Platform :       Linux                                                  //
// Application :                                                           //
// Author :         JCWang                                                 //
// Created Date :   2012_08_017                                            //
// Header :                                                                //
//                                                                         //
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
//                           Maintenance                                   //
/////////////////////////////////////////////////////////////////////////////

/*
 Version  Modified By  Date        Remarks
 =============================================================================
 0.0.1	   JCWang       2012-08-17  Basic initiate
 */

#ifndef SOCKET_CLIENT_H
#define SOCKET_CLIENT_H

/////////////////////////////////////////////////////////////////////////////
//                           Headers                                       //
/////////////////////////////////////////////////////////////////////////////

#include <pthread.h>

#include "socket_common.h"
#include "list_utils.h"

# ifdef __cplusplus
extern "C" {
# endif

/////////////////////////////////////////////////////////////////////////////
//                      Constant Declarations                              //
/////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////
//                      Data Structure Declarations                        //
/////////////////////////////////////////////////////////////////////////////

typedef struct client_info_s {
	char client_name_tr[32];
	char server_ip[32];
	int server_port;
	int socket_desc;
	pthread_t recv_thread_t;
	List recv_queue;
	pthread_mutex_t recv_queue_mutex;
	pthread_cond_t recv_queue_cond;
	bool isConnected;
} client_info_t;

/////////////////////////////////////////////////////////////////////////////
//                   Public Interface Declarations                         //
/////////////////////////////////////////////////////////////////////////////

client_info_t *SocketClient_init(char* name, char* ip, int port);

void SocketClient_send(client_info_t* client_info, socket_packet* packet);

void SocketClient_close(client_info_t* client_info);

# ifdef __cplusplus
}
#endif

#endif // SOCKET_CLIENT_H
